package procsim;

import java.awt.*;

public class PaintControlUnit1 extends PaintTab{
    public PaintControlUnit1 (Paint parent){
        super(parent);
        // Coordinates
        Design.brOPR.addCoords(this, 610, 215, 610, 200).addCoords(this, Design.CUOr.getUpper2Coords(35));
        Design.branch.addCoords(this, Design.CUOr.getLower2Coords(35));
        Design.CUOrOut.addCoords(this, Design.CUOr.getResCoords(63)).addCoords(this, 460, 377, 460, 363).addCoords(this, 460, 377, 460, 392);
        Design.run.addCoords(this, Design.CUAnd2.getUpper3Coords(35));
        Design.haltCompl.addCoords(this, Design.CUAnd2.getMiddle3Coords(35));
        Design.CUOrOut.addCoords(this, Design.CUAnd2.getLower3CoordsInv(35));
        Design.haltCompl.addCoords(this, Design.CUAnd1.getMiddle3Coords(35));
        Design.run.addCoords(this, Design.CUAnd1.getLower3Coords(35));
        Design.CUOrOut.addCoords(this, Design.CUAnd1.getUpper3Coords(35));
        Design.CUldCNT.addCoords(this, Design.CUAnd1.getResCoords(20)).addCoords(this, Design.CUCNT.getLdCoords(10)).addCoords(this, 545, 407, 545, 389);
        Design.CUincCNT.addCoords(this, Design.CUAnd2.getResCoords(20)).addCoords(this, Design.CUCNT.getIncCoords(10)).addCoords(this, 545, 347, 545, 370);
        Design.CUCNTOut.addCoords(this, Design.CUCNT.getOutCoords(40));
        Design.CUMPOut.addCoords(this, 661, 135, 690, 135).addCoords(this, 690, 320, 690, 135).addCoords(this, 610, 320, 690, 320).addCoords(this, Design.CUCNT.getInCoords(40));
        Design.br.addCoords(this, 451, 110, 560, 110);
        Design.op.addCoords(this, 201, 110, 241, 110).addCoords(this, 241, 110, 241, 270).addCoords(this, 241, 270, 490, 270).addCoords(this, 490, 270, 490, 160).addCoords(this, 490, 160, 560, 160);

        Design.RTI.addCoords(this, 20, 60, 70, 60);
        Design.RTS.addCoords(this, 20, 80, 70, 80);
        Design.CTRL.addCoords(this, 20, 100, 70, 100);

        Design.JMPIND2.addCoords(this, 20, 160, 70, 160);
        Design.MOVS2.addCoords(this, 20, 180, 70, 180);
        Design.ODO2.addCoords(this, 20, 200, 70, 200);

        Design.val00.addCoords(this, 270, 60, 320, 60);
        Design.val0E.addCoords(this, 270, 80, 320, 80);
        Design.val0F.addCoords(this, 270, 100, 320, 100);

        Design.val80.addCoords(this, 270, 160, 320, 160);
        Design.val85.addCoords(this, 270, 180, 320, 180);
        Design.val9A.addCoords(this, 270, 200, 320, 200);

        // Collections
        elements.add(Design.KMOP);
        elements.add(Design.KMBRANCH);
        elements.add(Design.CUOr);
        elements.add(Design.CUAnd1);
        elements.add(Design.CUAnd2);
        elements.add(Design.CUInv);
        elements.add(Design.CUMP);
        elements.add(Design.CUCNT);
        
        lines.add(Design.brOPR);
        lines.add(Design.branch);
        lines.add(Design.run);
        lines.add(Design.haltCompl);
        lines.add(Design.CUOrOut);
        lines.add(Design.CUldCNT);
        lines.add(Design.CUincCNT);
        lines.add(Design.CUCNTOut);
        lines.add(Design.CUMPOut);
        lines.add(Design.op);
        lines.add(Design.br);

        //added Signals
        lines.add(Design.RTI);
        lines.add(Design.RTS);
        lines.add(Design.CTRL);
        lines.add(Design.JMPIND2);
        lines.add(Design.MOVS2);
        lines.add(Design.ODO2);
        
        lines.add(Design.val00);
        lines.add(Design.val0E);
        lines.add(Design.val0F);
        lines.add(Design.val80);
        lines.add(Design.val85);
        lines.add(Design.val9A);

        addMouseListener(Design.KMOP);
        addMouseListener(Design.KMBRANCH);
    }

    @Override
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D gnew = (Graphics2D)g;
        Util.saveGraphics(gnew);
        gnew.setColor(Color.BLACK);
        gnew.drawLine(461, 335, 480, 335);
        gnew.drawLine(461, 395, 480, 395);
        Font f = g.getFont();
        g.setFont(new Font("Arial", Font.PLAIN, 12));
        g.drawString("14", 180, 60);
        g.drawString("16", 180, 80);
        g.drawString("1D", 180, 100);
        g.drawString("4F", 180, 160);
        g.drawString("55", 180, 180);
        g.drawString("61", 180, 200);
        g.drawString("00", 430, 60);
        g.drawString("0E", 430, 80);
        g.drawString("0F", 430, 100);
        g.drawString("80", 430, 160);
        g.drawString("85", 430, 180);
        g.drawString("9A", 430, 200);
        g.setFont(new Font("Arial", Font.PLAIN, 14));
        g.drawString(".", 40, 120);
        g.drawString(".", 40, 130);
        g.drawString(".", 40, 140);
        g.drawString(".", 290, 120);
        g.drawString(".", 290, 130);
        g.drawString(".", 290, 140);
        g.drawString(".", 185, 120);
        g.drawString(".", 185, 130);
        g.drawString(".", 185, 140);
        g.drawString(".", 435, 120);
        g.drawString(".", 435, 130);
        g.drawString(".", 435, 140);
        g.drawString("KMOP", 117, 130);
        g.drawString("KMBRANCH", 347, 130);
        g.setFont(f);
        Util.restoreGraphics(gnew);
    }
}
